package stacks

// 在遍历时，后遇到的左括号要先闭合，可以用一个栈来存储，当遇到一个右括号时，需要将一个相同类型的左括号闭合
// 此时，如果栈顶的括号不能和此右括号匹配，那么s就是无效的
func isValid(s string) bool {
	if len(s) % 2 != 0 {
		return false
	}
	stack := []byte{}
	for i := 0; i < len(s); i++ {
		if s[i] == '(' {
			stack = append(stack, ')')
		} else if s[i] == '[' {
			stack = append(stack, ']')
		} else if s[i] == '{' {
			stack = append(stack, '}')
		} else if len(stack) == 0 || stack[len(stack) - 1] != s[i] {
			return false
		} else {
			stack = stack[:len(stack) - 1]
		}
	}
	return len(stack) == 0
}